#!/usr/bin/env node

// 最终PWM测试脚本
const { execSync } = require('child_process');

console.log("🏁 最终PWM测试");

try {
  // 1. 初始化引脚
  execSync('gpio -g mode 12 out');
  execSync('gpio -g mode 13 out');
  console.log("✅ 引脚初始化完成");
  
  // 2. 发送中性信号
  console.log("发送中性信号...");
  sendPWMSignal(12, 1.5, 2000); // 舵机
  sendPWMSignal(13, 1.5, 2000); // 电调
  console.log("✅ 中性信号发送完成");
  
  // 3. 发送控制信号
  console.log("发送前进信号...");
  sendPWMSignal(13, 1.7, 3000); // 电调前进
  console.log("✅ 前进信号发送完成");
  
  // 4. 回到中性
  console.log("回到中性信号...");
  sendPWMSignal(12, 1.5, 1000); // 舵机
  sendPWMSignal(13, 1.5, 1000); // 电调
  console.log("✅ 回到中性信号完成");
  
  console.log("\n🎉 PWM测试完成！");
  console.log("\n💡 如果小车仍然没有反应，请检查:");
  console.log("   1. 硬件连接是否正确");
  console.log("   2. 电源供应是否充足");
  console.log("   3. 电调是否需要特殊校准");
  console.log("   4. 电机是否正常工作");
  
} catch (error) {
  console.error("❌ 测试失败:", error.message);
}

// 发送PWM信号函数
function sendPWMSignal(pin, dutyCycleMs, durationMs) {
  const periodMs = 20; // 50Hz = 20ms周期
  const highTimeMs = dutyCycleMs;
  const lowTimeMs = periodMs - dutyCycleMs;
  
  const cycles = Math.floor(durationMs / periodMs);
  
  for (let i = 0; i < cycles; i++) {
    execSync(`gpio -g write ${pin} 1`);
    sleep(highTimeMs);
    execSync(`gpio -g write ${pin} 0`);
    sleep(lowTimeMs);
  }
}

// 精确延时函数（毫秒）
function sleep(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {
    // 空循环等待
  }
}